var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var bodyParser = require('body-parser')  // 此为解析前端传递的数据
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();

app.use(bodyParser.urlencoded({ extended: false }))   // 此为解析前端传递的数据

// parse application/json
app.use(bodyParser.json())   // 此为解析前端传递的数据

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);


// 连接数据库

var mongoose=require('mongoose');  // 引入mongoose
mongoose.connect("mongodb://localhost:27017/nengyuan")  // 连接

// 查看连接状态
mongoose.connection.on('connected',()=>{
    console.log('连接成功')
})
mongoose.connection.on('error',()=>{
    console.log('error')
})
mongoose.connection.on('disconnected',()=>{
    console.log('断开连接')
})



var Schema = mongoose.Schema;

// 用户表  说明用户表的字段 
var USER = mongoose.model('USER', new Schema({
  name: String,
  address: String,
  avatar: String,
  date: String,
  createTime: {
      type:Date,
      default: Date.now
  }
}));


// 管理员表
var manager = mongoose.model('MANAGER', new Schema({
  username: String,
  password: String,
  createTime: {
      type:Date,
      default: Date.now
  }
}));


// req: request 前端发送的请求     res response 后端给前端的响应
app.post('/login', function(req,res) {
  
  

  // console.log(req.body)    // 获取前端传递过来的用户名和密码

  // 先根据前端传递过来的用户名 在 数据库中进行搜索

  manager.find({username: req.body.username}).then(result => {
   
    if (result.length == 0) { // 如果数据库中不存在此用户名  说明这个用户名尚未注册
      res.json({
        code: 400,
        msg: '尚未注册'
      })
    }else{
      if (result[0].password === req.body.password) {
        res.json({
          code: 200,
          msg: '登录成功'
        })
      }else{
        res.json({
          code: 400,
          msg: '密码错误'
        })
      }
    }
  })

  
  // 如果找到这个用户名  前端传递过来的密码 和 这个用户名的密码  进行比较
  // 相等  登录成功
  // 不等  密码错误

})

app.post('/add', function(req,res) {
  // 接收前端传递过来的数据
  // 将前端传递的数据 存到数据库中
  // 反馈给前端 新增成功
  // console.log(req.body)
  new USER(req.body).save().then(()=>{
    res.json({
      code: 200,
      msg: '新增成功'
    })
  })
  
})

app.get('/list', function(req,res) {
  // 前端请求接口  第几页，几条数据
  // 1 10  1-10
  // 2 10  11-20
  // 3 10  第21 - 30 数据  skip(20).limit(10)     skip((pn-1)*10).limit(ps)
  // console.log(req.query.pn) // 页码数
  // console.log(req.query.ps) // 展示几条数据

  // 从数据库中获取相应的数据
  // USER.find({})  {}中什么都不写表示获取所有的数据

  // 跳过几条数据   skip(2)
  // 获取几条数据   limit(2)

  // 假设数据库中有200条数据
  // 获取 后100条数据 101-200
  // skip(100).limit(100)

  // 获取 20-30条数据
  // skip(19).limit(11)
  USER.find({}).then(all => {
    // all 就是所有的数据
    USER.find({}).skip((req.query.pn-1)*req.query.ps).limit(req.query.ps).then(result => {
      res.json({
        code: 200,
        data: result,
        total: all.length // 后端应该告诉前端共多少条数据
      })
    })

  })

  

})

// get req.query
app.get('/search', function(req,res) {
  // console.log(req.query.search)  // 前端传递的搜索数据
  
  // 精确查找
  // USER.find({name: req.query.search}).then((result)=>{
  //   console.log(result)
  // })


  // 模糊查找
  USER.find({name: new RegExp(req.query.search)}).then((all)=>{
      // console.log(all)  // 通过模糊查找到的全局数据
      USER.find({name: new RegExp(req.query.search)}).skip((req.query.pn-1)*req.query.ps).limit(req.query.ps).then(result => {
        res.json({
          code: 200,
          data: result,
          total: all.length // 后端应该告诉前端共多少条数据
        })
      })
  })

  // 数据库中 共计200条数据，100条符合格式  添加分页

})

// post  req.body
app.post('/del', function(req,res) {
  // console.log(req.body.id);
  USER.deleteOne({_id: req.body.id}).then(()=>{
    res.json({
      code: 200,
      msg: '删除成功'
    })
  })
})


// 获取用户详情
app.get('/detail',function(req,res) {
  // req.query.id  前端传递的id
  USER.find({_id:req.query.id}).then(data => {
    res.json({
      code: 200,
      data: data
    })
  })
})


// 用户数据修改
app.post('/change', function (req,res) {
  USER.findById(req.body.id).then(data => {
    data.address= req.body.address
    data.name= req.body.name
    data.date= req.body.date
    data.avatar= req.body.avatar
    data.save()
    res.json({
      code: 200,
      msg: '修改成功'
    })
  })
})


  

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
